/**
 * @desc 桶排序
 * @param arr
 * @param size
 * @returns {Array}
 */
const bucketSort = (arr) => {
	// 使用 Math.min(), Math.max() 和 展开运算符 ( ...) 查找给定数组的最小值和最大值。
	const min = Math.min(...arr);
	const max = Math.max(...arr);
	// 使用 Array.from() 和 Math.floor() 创建初始化适当数量的buckets（空数组）。
	const size = arr.length
	const buckets = Array.from(
		{ length: Math.floor((max - min) / size) + 1 },
		() => []
	);
	// 利用数组长度和 Array.prototype.forEach() 将数组中的给定的数据填充到对应的某个存储桶。
	arr.forEach(val => {
		buckets[Math.floor((val - min) / size)].push(val);
	});
	// 使用 Array.prototype.reduce()、展开运算符 ( ...) 和 Array.prototype.sort() 对每个存储桶进行排序并将其附加到结果中。
	return buckets.reduce((acc, b) => [...acc, ...b.sort((a, b) => a - b)], []);
};
// 例子
const result = bucketSort([6, 3, 4, 1, 2, 5]); // [1, 2, 3, 4, 5, 6]
